package logs

// 阿里云监控日志打点

import (
	"time"

	"go.uber.org/zap"
)

type Level int

const (
	Level1    Level = iota // 1条报警
	Level10                // 10条报警
	Level50                // 50条报警
	Level100               // 100条报警
	Level500               // 500条报警
	Level1000              // 1000条报警
	Normal                 // 不报警
)

// 打到本地，然后运维从磁盘读取，放到阿里云服务器上
func aliyun(message string, level Level, fields ...zap.Field) {
	if aliyunLogger == nil {
		return
	}
	fields = append(fields, zap.String("project", aliyunConfig.project))
	fields = append(fields, zap.String("logstore", aliyunConfig.logstore))
	fields = append(fields, zap.Int("errLevel", int(level)))
	fields = append(fields, zap.String("server", serverName))
	defer aliyunLogger.Sync()
	aliyunLogger.Info(message, fields...)
}

func Aliyun(message string, fields ...zap.Field) {
	aliyun(message, Normal, fields...)
}

func AliyunError(errType string, fields ...zap.Field) {
	fields = append(fields, zap.String("errType", errType))
	fields = append(fields, zap.Stack("errStack"))
	aliyun("异常", Normal, fields...)
}

// 为了固定log字段key，防止出现多个key，不同类型，另外也为了复用
func GenAddEnergy(v int) zap.Field                  { return zap.Int("addEnergy", v) }
func GenAwardId(v string) zap.Field                 { return zap.String("awardId", v) }
func GenAwardNum(v int) zap.Field                   { return zap.Int("awardNum", v) }
func GenCallAt(v time.Time) zap.Field               { return zap.Time("callAt", v) }
func GenCanSendWechatMsg(v bool) zap.Field          { return zap.Bool("canSendWechatMsg", v) }
func GenChannel(v string) zap.Field                 { return zap.String("channel", v) }
func GenChipData(v interface{}) zap.Field           { return zap.Any("chipData", v) }
func GenChooseId(v int64) zap.Field                 { return zap.Int64("chooseId", v) }
func GenClientIP(v string) zap.Field                { return zap.String("clientIP", v) }
func GenContent(v string) zap.Field                 { return zap.String("content", v) }
func GenCount(v int) zap.Field                      { return zap.Int("count", v) }
func GenCustomerEnergy(v int) zap.Field             { return zap.Int("addCustomerEnergyEnergy", v) }
func GenDayStartLvl(v int) zap.Field                { return zap.Int("dayStartLvl", v) }
func GenDivorceCnt(v int) zap.Field                 { return zap.Int("divorceCnt", v) }
func GenEnergy(v int) zap.Field                     { return zap.Int("energy", v) }
func GenErrcode(v interface{}) zap.Field            { return zap.Any("errcode", v) }
func GenErrInfo(v interface{}) zap.Field            { return zap.Any("errInfo", v) }
func GenErrors(v []error) zap.Field                 { return zap.Errors("errors", v) }
func GenFlower(v int) zap.Field                     { return zap.Int("flower", v) }
func GenFriendCode(v string) zap.Field              { return zap.String("friendCode", v) }
func GenFriendId(v int64) zap.Field                 { return zap.Int64("friendId", v) }
func GenGameId(v string) zap.Field                  { return zap.String("gameId", v) }
func GenGender(v int) zap.Field                     { return zap.Int("gender", v) }
func GenGoodsName(v string) zap.Field               { return zap.String("goodsName", v) }
func GenGoodsPrice(v string) zap.Field              { return zap.String("goodsPrice", v) }
func GenGuideNew(v bool) zap.Field                  { return zap.Bool("guideNew", v) }
func GenHasErr(v bool) zap.Field                    { return zap.Bool("hasErr", v) }
func GenHeadImg(v string) zap.Field                 { return zap.String("headImg", v) }
func GenHouseLevel(v int) zap.Field                 { return zap.Int("houseLevel", v) }
func GenIdfa(v string) zap.Field                    { return zap.String("idfa", v) }
func GenInviteList(v interface{}) zap.Field         { return zap.Any("inviteList", v) }
func GenInviteType(v string) zap.Field              { return zap.String("inviteType", v) }
func GenIsAuth(v bool) zap.Field                    { return zap.Bool("isAuth", v) }
func GenIsGotDailyLoginReward(v bool) zap.Field     { return zap.Bool("isGotDailyLoginReward", v) }
func GenIsNewPlayer(v bool) zap.Field               { return zap.Bool("isNewPlayer", v) }
func GenJobName(v string) zap.Field                 { return zap.String("zoneId", v) }
func GenLastOARewardTime(v time.Time) zap.Field     { return zap.Time("lastOARewardTime", v) }
func GenLastUpdateEnergyTime(v time.Time) zap.Field { return zap.Time("lastUpdateEnergyTime", v) }
func GenLevel(v int) zap.Field                      { return zap.Int("level", v) }
func GenLevel1(v int) zap.Field                     { return zap.Int("level1", v) }
func GenLevel2(v int) zap.Field                     { return zap.Int("level2", v) }
func GenLoginAt(v time.Time) zap.Field              { return zap.Time("loginAt", v) }
func GenMarryCnt(v int) zap.Field                   { return zap.Int("marryCnt", v) }
func GenMessageId(v string) zap.Field               { return zap.String("messageId", v) }
func GenMethod(v string) zap.Field                  { return zap.String("method", v) }
func GenMillisecond(v int64) zap.Field              { return zap.Int64("millisecond", v) }
func GenMsgType(v string) zap.Field                 { return zap.String("msgType", v) }
func GenName(v string) zap.Field                    { return zap.String("name", v) }
func GenNewDivLetterCnt(v int) zap.Field            { return zap.Int("newDivLetterCnt", v) }
func GenNextWifeId(v int) zap.Field                 { return zap.Int("nextWifeId", v) }
func GenOAEnergy(v int) zap.Field                   { return zap.Int("addOAEnergy", v) }
func GenOncecntEnergy(v int) zap.Field              { return zap.Int("addOncecntEnergy", v) }
func GenOrderId(v string) zap.Field                 { return zap.String("orderId", v) }
func GenParams(v interface{}) zap.Field             { return zap.Any("params", v) }
func GenPlatformId(v string) zap.Field              { return zap.String("platformId", v) }
func GenPlatformType(v string) zap.Field            { return zap.String("platformType", v) }
func GenPlayerId(v int64) zap.Field                 { return zap.Int64("playerId", v) }
func GenQuestionId(v string) zap.Field              { return zap.String("questionId", v) }
func GenReason(v string) zap.Field                  { return zap.String("reason", v) }
func GenRequestData(v interface{}) zap.Field        { return zap.Any("requestData", v) }
func GenResData(v interface{}) zap.Field            { return zap.Any("resData", v) }
func GenResString(v string) zap.Field               { return zap.String("resString", v) }
func GenRewards(v interface{}) zap.Field            { return zap.Any("rewards", v) }
func GenRoleLevel(v int) zap.Field                  { return zap.Int("roleLevel", v) }
func GenRound(v int) zap.Field                      { return zap.Int("round", v) }
func GenScene(v int) zap.Field                      { return zap.Int("scene", v) }
func GenShareMethod(v int) zap.Field                { return zap.Int("shareMethod", v) }
func GenSharePoint(v int) zap.Field                 { return zap.Int("sharePoint", v) }
func GenShareT(v int64) zap.Field                   { return zap.Int64("shareT", v) }
func GenShareType(v string) zap.Field               { return zap.String("shareType", v) }
func GenShowGotMyAppletsReward(v bool) zap.Field    { return zap.Bool("showGotMyAppletsReward", v) }
func GenStoryId(v int) zap.Field                    { return zap.Int("storyId", v) }
func GenSummonEnergy(v int) zap.Field               { return zap.Int("addSummonEnergy", v) }
func GenSummonTip(v int) zap.Field                  { return zap.Int("summonTip", v) }
func GenTipCnt(v int) zap.Field                     { return zap.Int("tipCnt", v) }
func GenUID(v int64) zap.Field                      { return zap.Int64("uid", v) }
func GenUsedServerTipCnt(v int) zap.Field           { return zap.Int("usedServerTipCnt", v) }
func GenVersion(v string) zap.Field                 { return zap.String("version", v) }
func GenWeekcntEnergy(v int) zap.Field              { return zap.Int("addWeekcntEnergy", v) }
func GenWifeId(v int) zap.Field                     { return zap.Int("wifeId", v) }
func GenWives(v []int) zap.Field                    { return zap.Ints("wives", v) }
func GenZoneId(v int) zap.Field                     { return zap.Int("zoneId", v) }
func GenTaskId(v int64) zap.Field                   { return zap.Int64("taskId", v) }
func GenRankKey(v string) zap.Field                 { return zap.String("rankKey", v) }
